package org.javacore.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Fan
 * Date: 2018/7/21
 * Time: 22:37
 */
public class FailFastTest {
    private static List<Integer> list = new ArrayList<>();

    /**
     *  collection 进行迭代时，某个线程对该 collection 在结构上对其做了修改，
     *  这时迭代器就会抛出 ConcurrentModificationException 异常信息，从而产生 fail-fast。
     *
     *
     *  ConcurrentModificationException:
     *  当方法检测到对象的并发修改，但不允许这种修改时就抛出该异常。
     *  同时需要注意的是，该异常不会始终指出对象已经由不同线程并发修改，如果单线程违反了规则，同样也有可能会抛出改异常。
     * @param args
     */
    public static void main(String[] args) {
        String str = "a,b,,,4,";
        String[] ary = str.split(",");
            // 预期大于3，结果是2
        System.out.println(ary.length);



        /*for (int i = 0;i<10 ; i++){
            list.add(i);
        }
        new threadOne().start();
        new threadTwo().start();*/
    }
    public static class threadOne extends Thread{
        public void run(){
            Iterator<Integer> iterator = list.iterator();
            while (iterator.hasNext()){
                int i = iterator.next();
                System.out.println("ThreadOne 遍历："+i);
                try {
                    Thread.sleep(10);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
    }

    public static class threadTwo extends Thread{
        public void run(){
            int i = 0;
            while (i<6){
                System.out.println("ThreadTwo run: "+i);
                if (i==3){
                    list.remove(i);
                }
                i++;
            }
        }
    }
}
















